djinnifandomcom_ru-20200214-history
Создание квеста
Написано Катажиной Кучиньской. Файл:CDPR_logo.gif Что такое квест Прежде, чем приступать к созданию игры, мы, как правило, придумываем основную идею, сюжет, который будет передан в игре. Чтобы игрок получил возможность путешествовать по созданному нами миру, необходимо перевести эти идеи на язык игры. Для этого мы разрабатываем квесты, которые создают структуру зависимостей между действиями игрока и событиями в игровом мире. Эти два элемента и определяют сюжет игры. С помощью квестов можно определить, какие последствия будут иметь действия игрока: на него могут напасть монстры, он может получить награду, может измениться взаимодействие с другими персонажами или игрок получит определенное задание. Квесты отличаются определенной структурой, о которой мы поговорим ниже. Все стадии логически связаны между собой. И хотя базовая структура квеста очень проста, достаточно немного воображения, и вы сможете создать сложнейшую структуру зависимостей. Создание квеста Чтобы создать новый квест, в меню Файл (File) выберите Создать –> Файл Квеста (New –> Quest File) (рис. 1). left|frame|Рис. 1. Создание нового квеста Каждый квест состоит из нескольких стадий (рис. 2). Квест начинается при активации стадии Начало Квеста (Quest Beginning), а заканчивается после того, как завершаются все стадии. Когда игрок достигает в игре момента, связанного с определенной стадией квеста, эта стадия становится активной. При этом игрок получает возможность выполнить соответствующие действия (поговорить с NPC на определенную тему, убить монстра и так далее). Когда игрок выполняет необходимое действие, соответствующая стадия завершается. left|frame|Рис. 2. Стадии квеста Создание стадий квеста Чтобы создать условную стадию, щелкните правой кнопкой мыши по блоку Начало Квеста (Quest Beginning) и выберите Вставить стадию –> Условная стадия (Insert Phase –> Conditional Phase). Остальные типы стадий – это стадии с подквестами, основанные на условии "AND" (Subquests ‘AND’ Phase, рис. 5), условии "OR" (Subquests ‘OR’ Phase, рис. 6) или условии "XOR" (Subquests ‘XOR’ Phase, рис. 7). Последний тип – стадия с одним подквестом (‘1 Subquest’ Phase). left|frame|Рис. 3. Создание стадии квеста При создании стадии редактор D'jinni попросит вас присвоить ей имя. Учтите, что все имена должны быть уникальными. Нельзя создать две стадии с одинаковыми именами! left|frame|Рис. 4. Условная стадия Чтобы стадия завершалась в нужный момент, необходимо присвоить ей условия. Условная стадия будет завершена, когда все указанные условия будут выполнены. Стадия ‘AND’ завершается, когда выполняются условия всех подзаданий. Стадия ‘OR’ завершается, когда выполняются условия хотя бы одного подзадания. Стадия ‘XOR’ завершается, когда выполняется условие одного подзадания. Разница между стадиями ‘OR’ и ‘XOR’ заключается в том, что во втором случае после активации одного подзадания остальные подзадания выполнить невозможно. В стадии ‘OR’ можно выполнить любое количество подзаданий до завершения всей стадии. left|frame|Рис. 5. Стадия ‘AND’ left|frame|Рис. 6. Стадия ‘OR’ left|frame|Рис. 7. Стадия ‘XOR’ Создание условий для стадий квеста Каждой стадии квеста присваиваются определенные условия, которые игрок должен выполнить, чтобы завершить стадию. Чтобы создать условие, щелкните правой кнопкой мыши по блоку стадии, выберите пункт Добавить условие завершения (Add Completing Condition), а затем выберите нужное условие. Каждой стадии можно присвоить несколько условий, которые создаются точно таким же способом. left|frame|Рис. 8. Создание условий для квеста Самые значимые типы условий: * Выбранная реплика диалога (Dialog Line Chosen). Это условие используется чаще всего. Условие выполняется, когда игрок выбирает определенную реплику в диалоге. * Персонаж мертв (Character Is Dead). Выполняется, когда игрок убивает определенное количество монстров/персонажей, которым присвоен указанный тег. * Мертвых персонажей менее (Characters Dead Less Than). Выполняется, если количество живых монстров/персонажей с указанным тегом превышает определенное значение. * Запись в дневнике (Hero Has Journal Entry). Выполняется, если в дневнике Геральта есть определенная запись. * У игрока есть предмет (Hero Has Item(s)). Выполняется, когда игрок получает определенное количество указанных предметов. * Стадия квеста (Quest Phase Is). Выполняется, когда активируется стадия другого квеста. Условия Выбранная реплика диалога (Dialog Line Chosen) могут быть прогрессивными (условия, завершающие стадию квеста) и непрогрессивными (условия, не завершающие стадию квеста). Чтобы сделать условие непрогрессивными, поставьте флажок в правой его части (рис. 14). left|frame|Рис. 9. Непрогрессивная реплика В игре это будет отражено следующим образом: если игрок выбирает в диалоге с NPC непрогрессивную реплику, стадия квеста не меняется, и данная реплика будет доступна при следующем разговоре с тем же персонажем. Стадия квеста завершится только после того, как будут выполнены остальные условия (на рис. 9 отображена ситуация, в которой игрок должен получить определенный предмет). После этого данная реплика уже не будет доступна в диалоге. Непрогрессивные реплики, как правило, используются в ситуациях, когда игрок получает квест от NPC и должен иметь возможность уточнить подробности до его завершения. Параметры стадии квеста Чтобы просмотреть список параметров той или иной стадии, щелкните по ней левой кнопкой мыши. В правой части экрана откроется окно свойств (Properties). left|frame|Рис. 10. Просмотр параметров стадии квеста Первые шесть параметров относятся к описанию стадии, которое будет отображаться в дневнике Геральта при удачном или неудачном завершении квеста. Здесь же вы можете выбрать язык описания. * Локализованное имя квеста (Quest Localized Name). Здесь указывается имя квеста. * Локализованное имя стадии (Phase Localized Name). Здесь указывается имя стадии, которое будет отображаться в дневнике в качестве заголовка стадии. * Локализованное описание стадии (Phase Localized Description). Подробное описание стадии, отображаемое в дневнике. * Краткое локализованное описание стадии (Phase Localized Short Description). Краткое описание стадии, отображаемое при её завершении. Оно отображается желтым цветом под подробным описанием. * Локализованное описание проваленного квеста (Phase Failed Localized Description). Описание, отображаемое в дневнике при неудачном завершении стадии. * Краткое локализованное описание проваленного квеста (Phase Failed Localized Short Description). Краткое описание стадии, отображаемое при неудачном ее завершении. Следующие параметры относятся к настройке отметки на карте. Отметка – точка на карте, которая активируется после завершения стадии квеста. Она отображает, куда должен отправиться игрок. * Назначенный пункт перехода (тег) (Waypoint assigned (tag)). Здесь указывается тег пункта перехода, отмечающего место выполнения квеста. * Расположение на карте мира (Worldmap region). Указывает область в модуле, в которой должна отображаться отметка на карте. Один из важнейших параметров – Действие при выполнении стадии (OnPhaseCompleted Action). Здесь указывается скрипт, который будет загружен при успешном выполнении стадии квеста. Параметр Действие при неудачном завершении стадии (OnPhaseFailed Action) выполняет ту же функцию, но указанный скрипт загружается при неудачном выполнении стадии. Параметр Основной квест (IsPrimary) позволяет установить тип квеста (основной или второстепенный). От этого зависит раздел в дневнике Геральта, в котором будет отображаться данный квест. Ниже вы увидите раздел Действия при завершении стадии (OnPhaseFinished Actions), в котором указываются действия, выполняемые при завершении данной стадии. Чтобы добавить действие, выберите его в списке и щелкните по синему знаку плюса в правой части окна. Чтобы удалить действие, щелкните по красному знаку минуса справа от него. left|frame|Рис. 11. Свойства * Добавить опыт игроку (Add XP to player). Игрок получает определенное количество опыта. * Передать предмет игроку (Transfer item to player). NPC передает игроку предмет (который должен быть в снаряжении персонажа). В значении этого параметра укажите тег предмета (поле item_tag) и имя файла с расширением .npc (поле npc_resef). * Передать предмет NPC (Transfer item to NPC). Игрок передает предмет NPC. Введите тег соответствующего предмета (поле item_tag) и имя файла с расширением .npc (поле npc_resef). * Смена стадии игры (Change game phase). Произойдет смена стадии игры (например, начнется глава 3). Введите сюда имя стадии игры (поле gamephase_id). * Включить систему появления (Enable spawnset). Включает указанную систему появления монстра или второстепенного персонажа (поле spn_resef). * Выключить систему появления (Disable spawnset). Отключает указанную систему появления монстра или второстепенного персонажа (поле spn_resef). * Смена стадии сюжета NPC (Change NPC story phase). Смена сюжетной стадии для NPC. Введите имя стадии (поле spawnphase_id) и имя файла с расширением .npc (поле npc_resef). * Передать золото NPC (Transfer gold to NPC). Игрок передает деньги NPC. Укажите денежную сумму (поле gold_amount) и имя файла с расширением .npc (поле npc_resef). * Передать золото игроку (Transfer gold to player). NPC передает деньги игроку. Укажите денежную сумму (поле gold_amount) и имя файла с расширением .npc (поле npc_resef). * Установить признак диалога (Set dialog flag). Устанавливает значение признака диалога. Выберите в списке имя признака (поле name) и установите его значение (поле value, значение True или False). Признаки диалога перечислены в файле globalflags.2da. Те же параметры можно установить в следующем разделе Действия при завершении квеста (OnQuestFinished Actions). На этот раз указанные действия выполняются не в конце стадии, а в конце всего квеста, то есть после выполнения стадии Завершение квеста (Quest Completed). Подквесты left|frame|Рис. 12. Создание подквестов Чтобы добавить в стадию новый подквест, щелкните правой кнопкой мыши по блоку стадии и выберите пункт Добавить подквест (Add Subquest) (рис. 12). В каждой стадии можно создать неограниченное количество подквестов. С помощью этого же меню можно изменить тип стадии (например, с типа ‘AND’ на тип ‘OR’ или ‘XOR’), изменить цвет подквеста и имени стадии, удалить стадию или добавить новую стадию любого типа. Пункт Необязательная стадия (Optional Phase) позволяет указать, что данную стадию выполнять необязательно. left|frame|Рис. 13. Создание стадии подквеста Любой подквест также может включать в себя несколько стадий, каждой из которых, в свою очередь, можно присвоить собственный подквест. Для этого щелкните правой кнопкой мыши по подквесту, выберите пункт Вставить стадию (Insert Phase) и укажите тип нужной стадии (рис. 13). База данных квестов После того, как вы создадите квест, обязательно добавьте его в базу данных. В противном случае, игра просто не увидит этот квест. Все функции отладки, включая журнал, обращаются только к тем квестам, которые указаны в базах данных. Кроме того, базы данных позволяют сгруппировать квесты, которые появляются в игре в один и тот же момент (например, в определенной главе), в одной и той же локации или по любому другому признаку. Разделение квестов по базам данных значительно упрощает процесс обзора и распределения квестов. Чтобы создать новую базу данных, нажмите кнопку с двумя точками в окне обзора квестов (Quest Explorer). Выберите пункт Создать базу данных (Create New Database, рис. 14). Чтобы добавить готовый квест в базу данных, щелкните правой кнопкой мыши по пустому полю под надписью Базы данных квестов (Quest Databases). В меню выберите пункт Добавить готовый квест (Add Existing Quest To, рис. 15). Пункт Добавить новый квест (Add New Quest To) позволяет создать новый файл квеста и добавить его в указанную базу данных. left|frame|Рис. 14. Создание новой базы данных квестов left|frame|Рис. 15. Добавление заданий в базу данных Чтобы игра знала, какие квесты должны быть доступны в том или ином модуле, необходимо присвоить базы данных соответствующим модулям. Для этого в меню Модуль (Module) выберите пункт Открыть модуль (Open Module) и укажите соответствующий файл модуля. Затем в окне обзора модуля (Module Explorer) дважды щелкните по пункту Свойства модуля (Module Properties). Откроется окно с параметрами модуля. Найдите параметр Список баз данных квестов (Quest Database list) и щелкните по иконке с изображением папки в правой ячейке параметра. Откроется окно списка ресурсов (Resource list), в котором отображаются все доступные базы данных. Найдите нужную базу и дважды щелкните по ее имени или нажмите кнопку Добавить (Add) (рис. 16). left|frame|Рис. 16. Добавление баз данных в модуль Реплики квеста в диалогах Если выбор определенной реплики в диалоге подразумевает выполнение условия квеста, необходимо присвоить эту реплику соответствующему элементу квеста. Любую реплику можно превратить в реплику квеста (отмечается синей иконкой), но только реплики игрока (отображаются синим цветом) можно присвоить квесту (в этом случае они отмечаются иконкой в виде звезды). Чтобы назначить реплику квеста, щелкните по нужной реплике в диалоге. В правой части экрана откроется окно свойств (Properties, рис. 17). Найдите параметр Тип диалога (Conv Type) и присвойте ему значение Quest. Параметр Идентификатор квеста (Quest Id) играет очень важную роль. Здесь указывается уникальный идентификатор реплики квеста, который сообщает игре, что игрок выбрал реплику, связанную с квестом. left|frame|Рис. 17. Добавление реплики в квест Выбрав реплику квеста в диалоге и присвоив ей уникальный идентификатор, откройте квест и добавьте в соответствующую стадию условие Выбранная реплика диалога (Dialog Line Chosen). Щелкните по красной иконке и подождите, пока редактор откроет список всех реплик квеста во всех диалогах игры. Найдите нужную реплику и дважды щелкните по ней (рис. 17). Реплика квеста будет присвоена соответствующей стадии. Учтите, что прогрессивную реплику с определенным идентификатором можно присвоить только одному элементу только одного квеста. Однако непрогрессивную реплику можно присвоить неограниченному количеству элементов при условии, что данная реплика всегда является непрогрессивной. Примеры Ниже описано одно из заданий в игре «Ведьмак». Изучив этот пример, вы поймете, для чего мы использовали различные типы стадий, условий, связей между стадиями и так далее. left|frame|Рис. 18. Пример структуры квеста На рис. 18 отображена структура квеста q4006_bread. Он состоит из четырех стадий: начало квеста (Quest Beginning), получение хлеба (Getting bread), хлеб для эльфов (Bread for elves) и завершение квеста (Quest Completed). Вторая стадия является необязательной, то есть игрок не обязан выполнять её, чтобы завершить квест. На скриншоте также перечислены файлы диалогов с репликами, связанными с этим квестом (cn_baker01 и cn_toruviel01), и предметы, используемые в квесте (it_food_007, хлеб). Чтобы просмотреть информацию о структуре квеста, щелкните по синей стрелке рядом с именем каждой стадии или щелкните правой кнопкой мыши по серому фону и выберите пункт Раскрыть все (с условиями) (Expand All (with conditions)). left|frame|Рис. 19. Развернутая структура двух первых стадий квеста На рис. 19 отображены две раскрытые стадии квеста вместе с их условиями. В стадии Начало квеста (Quest Beginning) условием завершения является Выбранная реплика диалога (Dialog Line Chosen). При наведении курсора на окно диалога отобразится имя файла диалога, а также идентификатор реплики. Если хотите просмотреть диалог, щелкните по его имени, указанному в разделе Диалоги квеста (Dialogs In Quest). Если игрок при разговоре с Торувьель выберет реплику "Скажи, что я могу сделать?" (What can I do?), стадия Начало квеста (Quest Beginning) будет завершена, и квест начнётся. В этом же разговоре Торувьель попросит Геральта купить 5 караваев хлеба и даст ему 20 оренов. Игрок не знает, что один каравай стоит 5 оренов, поэтому ему придётся принять решение: заплатить 5 оренов из собственного кармана и принести эльфке обещанное количество хлеба или купить меньше хлеба и отдать Торувьель всего 4 каравая. При выборе блока Начало квеста (Quest Beginning) откроется окно параметров стадии. Имя квеста: "Хлеб насущный" (Daily Bread). После завершения первой стадии на экране появится следующий текст: "Мне нужно найти пекаря или торговца" (I must find a baker or a merchant). Кроме того, в дневнике появится новая запись под заголовком "Хлеб" (Bread). Текст этой записи: "Торувьель попросила меня купить 5 караваев хлеба для эльфов и дала мне 20 оренов. Мне нужно найти пекаря или торговца" (Toruviel gave me 20 orens and asked me to buy five loaves of bread for the elves. I must find a baker or a merchant). Если игрок не сможет выполнить квест, появится фраза "Думаю, хлеб эльфам больше не понадобится" (I doubt the elves still need the bread). При завершении этой стадии активируется отметка на карте с тегом wp_baker (показывающая дом пекаря), а Торувьель передаст Геральту 20 оренов. Этот квест является второстепенным. left|frame|Рис. 20. Параметры первой стадии Следующая стадия принадлежит к типу ‘OR’, что отображено в именах подквестов or: Subquest 1 и or: Subquest 2. Мы выбрали этот тип стадии, так как хотели включить две ситуации: Геральт приносит пять караваев (Subquest 1) или Геральт приносит четыре каравая (Subquest 2). Первому подквесту присвоено четыре условия. Условие У игрока есть предмет (Hero Has Item(s)) означает, что данная стадия будет активной до тех пор, пока игрок не получит 5 предметов с тегом it_food_007, то есть пять караваев хлеба. Рядом с условием Выбранная реплика диалога (Dialog Line Chosen) стоит флажок, означающий, что данная реплика является непрогрессивной и будет доступна в диалоге до тех пор, пока стадия не будет завершена. Это реплика из диалога с пекарем, у которого игрок может просить хлеб до тех пор, пока не купит его или не получит каким‐либо иным способом. Третье условие, Стадия игры <= (Game Phase Is <=), означает, что данный квест будет активным до тех пор, пока игрок не перейдет в пятую главу игры. Если к этому моменту квест не будет завершён, ему будет присвоен статус неудачно выполненного квеста. При этом в дневнике появится текст, указанный в параметрах Локализованное описание проваленного квеста (Phase Failed Localized Description) и Краткое локализованное описание проваленного квеста (Phase Failed Localized Short Description). Благодаря последнему условию, Стадия квеста <= (Quest Phase Is <=), квест будет активным до тех пор, пока игрок не достигнет стадии "Лютик" (Talk to Jaskier) в квесте q4004_elves. Во втором подквесте в условии У игрока есть предмет (Hero Has Item(s)) указаны четыре каравая хлеба. Один из подквестов будет завершён в зависимости от того, сколько караваев купит игрок. Третья стадия относится к завершению задания, если игрок принесет хлеб Торувьель. В этом случае мы также использовали тип стадии ‘OR’, так как игрок может принести четыре или пять караваев. Почему мы создали отдельную стадию, а не добавили стадии в подзадания предыдущей стадии? Дело в том, что игрок может купить четыре каравая у пекаря (завершив таким образом второе подзадание), а затем каким‐либо способом получить еще один каравай. Кроме того, игрок может отдать Торувьель четыре каравая даже в том случае, если у него их пять (ведь она дала деньги только на четыре каравая). Если бы мы добавили дополнительную стадию в каждое подзадание, мы, таким образом, лишили бы игрока возможности выбора (рис. 22). left|frame|Рис. 22. Альтернативный способ создания квеста Рассмотрим параметры третьей стадии. Учтите, что каждая стадия (квест или подквест) обладает собственными параметрами. Определенные события могут произойти как до, так и после выполнения условий подквеста, а также после основной стадии. Щелкните по красному блоку Bread for elves (хлеб для эльфов). В окне справа отобразятся параметры этой стадии (рис. 23). После завершения этой стадии произойдёт только одно событие: признаку диалога q4004_bread будет присвоено значение True (= 1). Этот признак установлен в диалоге с эльфами. После того, как он приобретет значение, равное 1, в диалоге станут доступны реплики, которым присвоен данный признак. То есть Геральт сможет сообщить эльфам, что принес им еду. Теперь щелкните по стадии подквеста 5 breads (5 караваев, рис. 24). После завершения этой стадии игрок получает 8000 пунктов опыта. После завершения всего квеста игрок передает Торувьель (npc_toruviel) пять предметов с тегом food_007, то есть пять караваев хлеба. left|frame|Рис. 23. Параметры третьей стадии квеста left|frame|Рис. 24. Параметры подквеста Квест q2117_girls – пример использования стадии ‘AND’ (рис. 25). В этом квесте Геральт должен помочь трём девушкам, к которым пристают бандиты. На стадии Начало квеста (Quest Beginning) игрок соглашается выполнить квест, выбрав соответствующую реплику в диалоге. В этом случае мы использовали стадию ‘AND’, так как квест может считаться завершенным только после того, как игрок избавит от обидчиков всех трёх девушек. Каждый подквест соответствует спасению одной девушки. Такой тип решения позволяет игроку спасать девушек в любом порядке. [[Файл:Q_25.jpg|left|frame|Рис. 25. Пример использования стадии ‘AND’]] Рассмотрим условия, присвоенные подквестам. Во всех трёх подквестах у нас указана одна и та же непрогрессивная реплика квеста. То есть при разговоре с Кармен (которая даёт Геральту этот квест) игрок может уточнить подробности. Реплика присвоена всем трём стадиям, благодаря чему она будет доступна в диалоге до тех пор, пока Геральт не выполнит всю стадию "Бой с бандитами" (Attacks). Кроме того, в каждом подквесте присутствует условие Персонаж мёртв (Character Is Dead). В значении этого условия указан тег бандита и количество персонажей с этим тегом, которых должен убить игрок, чтобы завершить подквест. [[Файл:Q_26.jpg|left|frame|Рис. 26. Пример использования стадии ‘XOR’]] Рис. 26 демонстрирует пример использования стадии ‘XOR’. В зависимости от записи, которая появится в дневнике Геральта (Абигайл спасена или Абигайл мертва) в результате предыдущих решений игрока, начнётся один из подквестов, а второй будет отключён. en:Create_quest pl:Tworzenie_questa Категория:С чего начать Категория:Написано Катажиной Кучиньской